// pages/orderHistory/orderHistory.js
const orderApi = require('../../api/order');

// 使用新的API接口获取历史订单

Page({
  /**
   * 页面的初始数据
   */
  data: {
    currentTab: 'all', // 当前选中的标签
    orderList: [], // 订单列表
    filteredOrderList: [], // 根据标签筛选后的订单列表
    loading: false, // 加载状态
    page: 1, // 当前页码
    pageSize: 10, // 每页记录数
    total: 0, // 总记录数
    hasMore: true // 是否有更多数据
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 如果从其他页面传入了tab参数，则切换到对应标签
    if (options.tab) {
      this.setData({
        currentTab: options.tab
      });
    }
    
    // 初始化订单列表
    this.filterOrders();
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 获取订单列表
    this.getOrderList();
  },

  // 获取订单列表
  getOrderList(refresh = false) {
    // 如果正在加载，则不重复请求
    if (this.data.loading) return;
    
    // 如果是刷新，则重置页码
    if (refresh) {
      this.setData({
        page: 1,
        hasMore: true,
        orderList: []
      });
    }
    
    // 如果没有更多数据，则不请求
    if (!this.data.hasMore && !refresh) return;
    
    // 设置加载状态
    this.setData({ loading: true });
    
    // 构建请求参数
    const params = {
      page: this.data.page,
      pageSize: this.data.pageSize
    };
    
    // 如果不是全部标签，则添加状态参数
      if (this.data.currentTab !== 'all') {
        const statusMap = {
          'pending_payment': 1, // 待付款
          'to_be_confirmed': 2, // 待接单
          'confirmed': 3, // 已接单
          'delivery': 4, // 派送中
          'completed': 5, // 已完成
          'cancelled': 6, // 已取消
          'refunded': 7 // 已退款
        };
        params.status = statusMap[this.data.currentTab];
      }
    
    // 调用API获取历史订单
    orderApi.getHistoryOrders(params).then(res => {
      // 处理返回的数据
      if (res.code === 1 && res.data && res.data.records) { // 注意：业务成功状态码为1
        // 格式化订单数据
        const newOrders = res.data.records.map(order => {
          // 计算订单中的菜品总数
          let totalCount = 0;
          if (order.orderDetailList && order.orderDetailList.length > 0) {
            totalCount = order.orderDetailList.reduce((sum, item) => sum + (item.number || 0), 0);
          }
          
          // 转换订单状态为显示文本
          let statusText = '未知状态';
          switch (order.status) {
            case 1: statusText = '待付款'; break;
            case 2: statusText = '待接单'; break;
            case 3: statusText = '已接单'; break;
            case 4: statusText = '派送中'; break;
            case 5: statusText = '已完成'; break;
            case 6: statusText = '已取消'; break;
            case 7: statusText = '已退款'; break;
            default: statusText = '未知状态';
          }
          
          // 返回格式化后的订单数据
          return {
            id: order.id,
            orderNo: order.number,
            orderTime: order.orderTime,
            status: statusText,
            dishes: order.orderDetailList ? order.orderDetailList.map(detail => ({
              id: detail.dishId || detail.setmealId,
              name: detail.name || '未知菜品',
              image: detail.image || '/assets/images/default-dish.png',
              price: detail.amount || 0,
              count: detail.number || 1,
              spec: detail.dishFlavor || ''
            })) : [],
            totalCount: totalCount,
            totalPrice: order.amount || 0,
            isEvaluated: false // 暂无评价状态，默认为false
          };
        });
        
        // 更新订单列表和分页信息
        this.setData({
          orderList: refresh ? newOrders : [...this.data.orderList, ...newOrders],
          total: res.data.total || 0,
          hasMore: newOrders.length >= this.data.pageSize,
          page: this.data.page + 1
        }, () => {
          // 筛选订单
          this.filterOrders();
        });
      } else {
        // 没有数据
        this.setData({
          hasMore: false
        });
      }
    }).catch(err => {
      console.error('获取订单列表失败', err);
      wx.showToast({
        title: '获取订单列表失败',
        icon: 'none'
      });
    }).finally(() => {
      // 无论成功失败，都结束加载状态
      this.setData({ loading: false });
      // 停止下拉刷新
      wx.stopPullDownRefresh();
    });
  },

  // 根据当前标签筛选订单
  filterOrders() {
    const { orderList, currentTab } = this.data;
    let filteredOrderList = [];
    
    if (currentTab === 'all') {
      filteredOrderList = orderList;
    } else {
      const statusMap = {
        'pending_payment': '待付款',
        'to_be_confirmed': '待接单',
        'confirmed': '已接单',
        'delivery': '派送中',
        'completed': '已完成',
        'cancelled': '已取消',
        'refunded': '已退款'
      };
      
      filteredOrderList = orderList.filter(order => order.status === statusMap[currentTab]);
    }
    
    this.setData({ filteredOrderList });
  },

  // 切换标签
  switchTab(e) {
    const tab = e.currentTarget.dataset.tab;
    
    // 如果切换到不同的标签，则重新获取订单列表
    if (tab !== this.data.currentTab) {
      this.setData({
        currentTab: tab,
        page: 1,
        hasMore: true,
        orderList: []
      }, () => {
        // 重新获取订单列表
        this.getOrderList(true);
      });
    }
  },

  // 跳转到订单详情
  goToOrderDetail(e) {
    const id = e.currentTarget.dataset.id;
    wx.navigateTo({
      url: `/pages/orderDetail/orderDetail?id=${id}`
    });
  },

  // 跳转到评价页面
  goToEvaluate(e) {
    const id = e.currentTarget.dataset.id;
    wx.navigateTo({
      url: `/pages/evaluate/evaluate?orderId=${id}`
    });
  },

  // 再来一单
  orderAgain(e) {
    const id = e.currentTarget.dataset.id;
    
    // 显示加载中
    wx.showLoading({
      title: '处理中',
      mask: true
    });
    
    // 调用再来一单API
    orderApi.repeatOrder(id).then(res => {
      if (res.code === 1) { // 注意：业务成功状态码为1
        // 设置全局标记，用于在首页显示购物车
        getApp().globalData.showCartAfterRedirect = true;
        
        // 隐藏加载中
        wx.hideLoading();
        
        // 显示成功提示
        wx.showToast({
          title: '已添加到购物车',
          icon: 'success',
          duration: 1500,
          success: () => {
            // 跳转到首页
            setTimeout(() => {
              wx.switchTab({
                url: '/pages/index/index'
              });
            }, 1500);
          }
        });
      } else {
        wx.hideLoading();
        wx.showToast({
          title: res.msg || '操作失败，请重试',
          icon: 'none'
        });
      }
    }).catch(err => {
      console.error('再来一单失败', err);
      wx.hideLoading();
      wx.showToast({
        title: '操作失败，请重试',
        icon: 'none'
      });
    });
  },
  
  // 添加返回按钮功能
  goBack() {
    wx.navigateBack();
  },

  // 去支付
  goToPay(e) {
    const id = e.currentTarget.dataset.id;
    wx.navigateTo({
      url: `/pages/payment/payment?id=${id}`
    });
  },

  // 跳转到首页
  goToIndex() {
    wx.switchTab({
      url: '/pages/index/index'
    });
  },

  // 取消订单
  cancelOrder(e) {
    const id = e.currentTarget.dataset.id;
    
    wx.showModal({
      title: '提示',
      content: '确定要取消该订单吗？',
      success: (res) => {
        if (res.confirm) {
          wx.showLoading({
            title: '处理中',
            mask: true
          });
          
          orderApi.cancelOrder(id).then(res => {
            if (res.code === 1) {
              wx.showToast({
                title: '订单已取消',
                icon: 'success'
              });
              // 刷新订单列表
              this.getOrderList(true);
            } else {
              wx.showToast({
                title: res.msg || '取消失败，请重试',
                icon: 'none'
              });
            }
          }).catch(err => {
            console.error('取消订单失败', err);
            wx.showToast({
              title: '取消失败，请重试',
              icon: 'none'
            });
          }).finally(() => {
            wx.hideLoading();
          });
        }
      }
    });
  },

  // 催单
  reminderOrder(e) {
    const id = e.currentTarget.dataset.id;
    
    wx.showLoading({
      title: '处理中',
      mask: true
    });
    
    orderApi.reminderOrder(id).then(res => {
      if (res.code === 1) {
        wx.showToast({
          title: '催单成功',
          icon: 'success'
        });
      } else {
        wx.showToast({
          title: res.msg || '催单失败，请重试',
          icon: 'none'
        });
      }
    }).catch(err => {
      console.error('催单失败', err);
      wx.showToast({
        title: '催单失败，请重试',
        icon: 'none'
      });
    }).finally(() => {
      wx.hideLoading();
    });
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    // 下拉刷新，重新获取订单列表
    this.getOrderList(true);
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
    // 上拉加载更多
    this.getOrderList();
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})